const vscode = require('vscode');

/**
 * 核心功能：移除每行开头的“+”号（兼容半角/全角、行首空格）
 * @param {string} text 选中的补丁文本
 * @returns {string} 处理后的文本
 */
function removeLeadingPlus(text) {
    console.log("[补丁工具] 开始处理文本，长度：", text.length);
    
    if (!text) {
        console.log("[补丁工具] 文本为空，直接返回");
        return "";
    }

    // 正则表达式解释：
    // ^      匹配行首
    // [+\uff0b] 匹配半角+（+）或全角＋（\uff0b是全角+的Unicode编码）
    // gm     全局（g）+ 多行（m）模式，确保每行都处理
    const processedText = text.replace(/^[+\uff0b]/gm, '');
    
    console.log("[补丁工具] 处理完成，原始文本前50字符：", text.slice(0, 50));
    console.log("[补丁工具] 处理后文本前50字符：", processedText.slice(0, 50));
    return processedText;
}

/**
 * 插件激活入口
 * @param {vscode.ExtensionContext} context 插件上下文
 */
function activate(context) {
    console.log("[补丁工具] 插件已激活！");

    // 注册核心命令
    const disposable = vscode.commands.registerCommand(
        'patch-remover-final.removePlus',
        async function () {
            console.log("[补丁工具] 命令被触发，开始执行...");

            // 1. 检查是否有活跃编辑器
            const editor = vscode.window.activeTextEditor;
            if (!editor) {
                console.error("[补丁工具] 错误：未找到活跃编辑器");
                vscode.window.showErrorMessage("请先打开需要处理的文件！");
                return;
            }
            console.log("[补丁工具] 成功获取编辑器：", editor.document.fileName);

            // 2. 检查是否选中文本
            const selection = editor.selection;
            if (selection.isEmpty) {
                console.error("[补丁工具] 错误：未选中文本");
                vscode.window.showWarningMessage("请先选中需要处理的补丁片段！");
                return;
            }
            console.log(`[补丁工具] 选中区域：行${selection.start.line + 1} → 行${selection.end.line + 1}`);

            // 3. 读取选中文本
            const selectedText = editor.document.getText(selection);
            console.log("[补丁工具] 选中的原始文本：", selectedText);

            // 4. 处理文本（移除+号）
            const processedText = removeLeadingPlus(selectedText);

            // 5. 替换文本到编辑器
            console.log("[补丁工具] 开始替换文本...");
            const replaceSuccess = await editor.edit(editBuilder => {
                editBuilder.replace(selection, processedText);
            });

            // 6. 反馈结果
            if (replaceSuccess) {
                console.log("[补丁工具] 文本替换成功！");
                vscode.window.showInformationMessage("✅ 补丁行首加号已成功移除！");
            } else {
                console.error("[补丁工具] 文本替换失败！");
                vscode.window.showErrorMessage("❌ 文本替换失败，请重试！");
            }
        }
    );

    context.subscriptions.push(disposable);
}

function deactivate() {
    console.log("[补丁工具] 插件已卸载！");
}

module.exports = { activate, deactivate };



